SSG方案大全Jamstack:自建文档库方案VitePress
一、为什么组件库项目需要文档站
组件库的核心用户是开发者。一份高质量的文档站是组件库成功的必要条件,它直接影响开发者的采纳意愿和使用效率。
1.1 为什么不选语雀/飞书/钉钉文档
虽然这些在线文档系统功能强大,但在企业内部场景下存在明显局限:
| 维度 | 在线文档(语雀/飞书) | 自建SSG文档站 |
|---|---|---|
| 协作人数 | 有限制(免费版5-50人) | 无限制 |
| 文档体积 | 单文档有上限 | 无限制 |
| 网络要求 | 需要外网访问 | 内网可部署 |
| 定制化 | 有限的模板和样式 | 完全自定义 |
| 版本控制 | 依赖平台功能 | Git管理,完整历史 |
| 搜索能力 | 平台内置 | 可自定义搜索方案 |
| 部署成本 | 订阅费用 | 一台Nginx服务器即可 |
对于内网环境的企业来说,SSG方案只需一台服务器存放生成的HTML文件,配置一个Nginx就能让全团队访问。
1.2 SSG(静态站点生成)的工作原理
Markdown源文件 → SSG框架编译 → 静态HTML/CSS/JS → 部署到Web服务器
text
核心优势:无需后端服务器、加载速度极快、SEO友好、安全性高。
二、Jamstack生态与SSG方案全览
2.1 Jamstack.org -- SSG方案的百科全书
Jamstack.org 的 Site Generators 页面收录了超过350个SSG框架,可以通过语言、模板语法、License等维度进行筛选。
按GitHub Stars排名的主流方案(2026年):
| 排名 | 项目 | Stars | 语言 | 模板 | 特色 |
|---|---|---|---|---|---|
| 1 | Next.js | 130k+ | JavaScript | React | SSR/SSG混合、生态最大 |
| 2 | Hugo | 80k+ | Go | Go Template | 编译速度极快 |
| 3 | Gatsby | 55k+ | JavaScript | React | GraphQL数据层 |
| 4 | Astro | 49k+ | JavaScript | 多框架 | Islands架构、零JS默认 |
| 5 | Nuxt | 55k+ | JavaScript | Vue | SSR/SSG混合、Vue生态 |
| 6 | Jekyll | 49k+ | Ruby | Liquid | GitHub Pages原生支持 |
| 7 | Hexo | 39k+ | JavaScript | EJS/Pug | 中文社区活跃 |
| 8 | VuePress | 22k+ | JavaScript | Vue | Vue团队出品 |
| 9 | VitePress | 13k+ | JavaScript | Vue | Vue团队新作,性能优异 |
| 10 | Docusaurus | 58k+ | JavaScript | React | Meta出品,功能丰富 |
2.2 前端开发者的筛选条件
在Jamstack.org上筛选时,推荐设置:
- Language: JavaScript(前端开发者最熟悉)
- Template: Vue 或 React(根据团队技术栈)
- License: MIT(最宽松的开源协议)
筛选后大约有100+个候选方案。
三、为什么选择VitePress
3.1 候选方案对比
在Vue生态中,主要的文档框架有三个:
| 维度 | VuePress 2 | VitePress | Nuxt Content |
|---|---|---|---|
| 维护状态 | 维护模式 | 活跃开发 | 活跃开发 |
| 构建速度 | 较慢(Webpack+Vite双模式) | 快(纯Vite) | 中等 |
| 配置复杂度 | 中等 | 简单 | 中等 |
| 主题系统 | 丰富 | 够用 | 灵活 |
| 插件生态 | 丰富 | 基础 | 丰富(Nuxt模块) |
| 学习曲线 | 平缓 | 极低 | 中等 |
| Vue 3支持 | 支持 | 原生 | 原生 |
| 适合场景 | 复杂文档站 | 快速搭建文档 | 内容驱动应用 |
3.2 选择VitePress的理由
淘汰VuePress的原因:
- VuePress已进入维护模式,官方推荐迁移到VitePress
- 内部维护Webpack和Vite两套打包方案,复杂度高
- 构建速度比VitePress慢
淘汰Astro/Nextra的原因:
- Astro主题系统最丰富,但学习曲线陡峭
- Nextra(Next.js文档框架)对非React团队不友好
- 写说明文档不需要太复杂的主题定制能力
选择VitePress的核心原因:
- 快速 -- 基于Vite,开发和构建速度极快
- 简单 -- 只需要写Markdown就能运行文档站
- 官方维护 -- 由Vue团队维护,与Vue生态无缝集成
- 够用 -- 文档站需要的功能它都有(导航、侧边栏、搜索、暗黑模式)
- Vue原生 -- 可以在Markdown中直接使用Vue组件
四、VitePress快速上手
4.1 项目初始化
# 1. 创建项目目录
mkdir docs && cd docs
# 2. 初始化package.json
npm init -y
# 3. 使用VitePress CLI初始化(必须加@latest)
npx vitepress@latest init
bash
初始化过程中会提示以下配置:
┌ Welcome to VitePress!
│
◇ Where should VitePress initialize the config?
│ ./ (默认回车)
│
◇ Site title:
│ 高性能组件库
│
◇ Site description:
│ 基于Vue 3的通用管理后台组件库
│
◆ Theme:
│ ● Default Theme (Out of the box, good-looking docs)
│ ○ Default Theme + Customization
│ ○ Custom Theme
│
◆ Use TypeScript for config and theme files?
│ ● Yes
│ ○ No
│
◆ Add VitePress scripts to package.json?
│ ● Yes
│ ○ No
text
4.2 手动安装依赖(重要)
VitePress CLI存在一个已知bug:初始化后的package.json中缺少devDependencies。需要手动安装:
# 安装VitePress和Vue
pnpm add -D vitepress vue
bash
这是因为VitePress CLI的issue(#3222)至今仍处于open状态。安装完依赖后,package.json应该包含:
{
"scripts": {
"docs:dev": "vitepress dev",
"docs:build": "vitepress build",
"docs:preview": "vitepress preview"
},
"devDependencies": {
"vitepress": "^1.6.0",
"vue": "^3.5.0"
}
}
json
4.3 配置srcDir(推荐)
将Markdown文件放到src目录下,保持项目根目录整洁:
# 创建src目录
mkdir src
# 移动markdown文件
mv index.md src/
mv markdown-examples.md src/ # 如果有示例文件
bash
在.vitepress/config.mts中配置:
// .vitepress/config.mts
import { defineConfig } from 'vitepress'
export default defineConfig({
// 设置源文件目录
srcDir: 'src',
// 站点配置
title: '高性能组件库',
description: '基于Vue 3的通用管理后台组件库',
// 主题配置
themeConfig: {
// 顶部导航
nav: [
{ text: '首页', link: '/' },
{ text: '指南', link: '/guide/' },
{ text: '组件', link: '/components/' },
],
// 侧边栏
sidebar: {
'/guide/': [
{
text: '开始',
items: [
{ text: '介绍', link: '/guide/introduction' },
{ text: '快速开始', link: '/guide/getting-started' },
{ text: '安装', link: '/guide/installation' },
],
},
],
'/components/': [
{
text: '基础组件',
items: [
{ text: '按钮 Button', link: '/components/button' },
{ text: '图标 Icon', link: '/components/icon' },
{ text: '输入框 Input', link: '/components/input' },
],
},
{
text: '布局组件',
items: [
{ text: '侧边栏 Sidebar', link: '/components/sidebar' },
{ text: '顶栏 Header', link: '/components/header' },
],
},
],
},
// 搜索
search: {
provider: 'local', // 本地搜索
},
// 社交链接
socialLinks: [
{ icon: 'github', link: 'https://github.com/your-org/your-repo' },
],
},
})
typescript
4.4 启动开发服务器
pnpm docs:dev
bash
访问终端输出的地址(通常是http://localhost:5173),即可看到文档站。
五、VitePress核心配置详解
5.1 目录结构
docs/
├── .vitepress/
│ ├── config.mts # 主配置文件
│ ├── theme/
│ │ └── index.ts # 主题自定义
│ └── cache/ # 构建缓存
├── src/
│ ├── index.md # 首页
│ ├── guide/ # 指南目录
│ │ ├── introduction.md
│ │ └── getting-started.md
│ └── components/ # 组件文档目录
│ ├── button.md
│ └── icon.md
├── public/ # 静态资源
│ └── logo.svg
└── package.json
text
5.2 首页配置(Frontmatter)
src/index.md的Frontmatter控制首页布局:
---
layout: home
hero:
name: 组件库
text: 通用管理后台解决方案
tagline: 基于 Vue 3 + TypeScript + Element Plus
image:
src: /logo.svg
alt: 组件库Logo
actions:
- theme: brand
text: 快速开始
link: /guide/getting-started
- theme: alt
text: 组件文档
link: /components/button
features:
- icon: ⚡
title: 高性能
details: 基于Vite构建,开发体验流畅,生产包体积优化
- icon: 🎨
title: 主题定制
details: 支持CSS变量和SCSS变量双重主题定制方案
- icon: 📦
title: 开箱即用
details: 内置常用管理后台页面模板,快速搭建项目
- icon: 🔐
title: 权限管理
details: 完善的RBAC权限系统,支持按钮级权限控制
- icon: 🌐
title: 国际化
details: 内置i18n支持,轻松实现多语言切换
- icon: 📱
title: 响应式
details: 完美适配桌面端和平板端,灵活布局方案
---
markdown
5.3 让AI生成Features列表
利用AI快速生成首页的Features部分:
按照如下的结构为我总结组件库项目中的核心feature,
结构如下(VitePress的features格式),
在title中加入合适的emoji图标,
总结总数不能超过9条。
text
六、学习VitePress的最佳资源
6.1 官方资源
- VitePress官网:vitepress.dev
- Vue.js官方文档:vuejs.org -- 本身就是用VitePress构建的,是最好的参考范例
- VitePress GitHub:github.com/vuejs/vitepress
6.2 从优秀项目中学习
在GitHub上搜索高Star的VitePress项目:
搜索语法:vitepress stars:>100
text
推荐关注的项目:
- Vue.js官方文档 -- VitePress的最佳实践范本
- Vue Router文档 -- 复杂导航和侧边栏配置参考
- Pinia文档 -- 搜索和国际化配置参考
- Element Plus文档 -- 组件文档的交互设计参考(注意它使用的是自定义VitePress主题)
6.3 VitePress vs VuePress 迁移注意
如果你从VuePress迁移到VitePress,需要注意:
- 配置文件格式从
.js变为.mts(推荐TypeScript) - Frontmatter字段略有差异
- 插件系统不同,VitePress使用Vite插件
- 主题API有所变化,需要参考迁移指南
七、文档站构建与部署
7.1 构建
# 构建静态站点
pnpm docs:build
# 本地预览构建结果
pnpm docs:preview
bash
构建产物默认输出到.vitepress/dist目录。
7.2 部署方案
| 方案 | 适用场景 | 配置难度 |
|---|---|---|
| Nginx静态托管 | 企业内网 | 低 |
| GitHub Pages | 开源项目 | 低 |
| Vercel | 快速部署 | 极低 |
| Netlify | 自动化部署 | 低 |
企业内网最简单的部署方式:
# 构建产物复制到服务器
scp -r .vitepress/dist/* user@server:/var/www/docs/
# Nginx配置示例
server {
listen 80;
server_name docs.company.local;
root /var/www/docs;
index index.html;
location / {
try_files $uri $uri/ $uri.html =404;
}
}
bash
八、总结
VitePress作为组件库文档站的技术选型,核心优势在于快速、简单、够用。它不需要复杂的学习过程,只需要写Markdown就能生成漂亮的文档站。对于管理后台组件库这种以开发者为主要用户的项目,VitePress的Markdown优先理念完美契合需求。
| 步骤 | 命令/操作 |
|---|---|
| 初始化 | npm init -y && npx vitepress@latest init |
| 安装依赖 | pnpm add -D vitepress vue |
| 配置srcDir | 在config.mts中设置srcDir: 'src' |
| 配置导航和侧边栏 | 在config.mts的themeConfig中配置 |
| 编写文档 | 在src目录下创建Markdown文件 |
| 启动开发 | pnpm docs:dev |
| 构建部署 | pnpm docs:build |
↑